package thread;

import java.util.Scanner;

// volatile 的使用
public class ThreadDemo11 {
    static class Counter{
        public volatile int flag = 0;
    }
    // 不加 volatile,线程t1循环不会结束，因为线程t1使用的工作内存的flag，
    // 不受线程t2修改过的主内存中flag影响

    // 加volatile 后线程t1每次使用flag 都是从主内存中获取，能及时直到flag的变化
    public static void main(String[] args) {
        Counter counter = new Counter();

        Thread t1 = new Thread(()->{
            while(counter.flag == 0){

            }
            System.out.println("循环结束！");
        });

        Thread t2 = new Thread(()->{
            Scanner scanner = new Scanner(System.in);
            System.out.println("输入一个非零整数");
            counter.flag = scanner.nextInt();
        });

        t1.start();
        t2.start();
    }
}
